<?php
/**
 * <i>@pager</i>组件
 * 
 * 从0.1开始起，欲使用该组件，必须先取得实现IPager接口的类的实例。
 * 
 * IPager在toolkit.pager包内可以获得，并有两个简单的实现。
 * 
 * 使用例子：
 * <pre>
 * <span com="@pager" x-pager="$pager" x-query="cateId=1&page=%{PAGE_NO}" x-path="index.php"></span>
 * </pre>
 * 
 * 程序：
 * <code>
 * import("pager.IYahooPager");
 * $this->pager = new IYahooPager();
 * $this->pager->setPageSize(15);
 * $this->pager->setContentSize(100);
 * </code>
 * 
 * 可以使用的参数有：
 *  x-pager IPager对象
 *  x-query string 查询
 *  x-path string 路径
 * 
 * @version $Id: IMintPagerComponent.php 312 2008-04-23 16:29:38Z iwind $
 * @package util.mint.component
 * @since 0.0.3
 */
class IMintPagerComponent extends IAbstractMintComponent {
	/**
	 * 取得支持的参数列表
	 *
	 * @return array
	 */		
	public function getSupportedParameters() {
		return array("x-pager", "x-query", "x-path");
	}
	
	/**
	 * 取得HTML属性映射
	 *
	 * @return array
	 * @since 0.0.3
	 */		
	public function getHtmlAttrMapping() {
		return array();
	}	
	
	/**
	 * 处理组件
	 *
	 * @return boolean
	 * @since 0.0.3
	 */		
	public function processComponent() {
		$xQuery = $this->getParameterValue("x-query");
		$xPath = $this->getParameterValue("x-path");
		$xPager = $this->getParameterValue("x-pager");
		if ($xPager == "") {
			$this->throwVariableException("x-pager");
		}
		$xPagerValue = IMintVariable::getDefinition($xPager);
		if ($xPagerValue == null) {
			$this->throwVariableException("x-pager");
		}
		$text = "<?php\n if (!is_object({$xPagerValue})||!({$xPagerValue} instanceof IPager)){\n";
		$text .= "throw new IMintException(\"'x-pager' must be an instance of IPager\");";
		$text .= "}\n";
		if (!is_null($xPath)) {
			$text .= "{$xPagerValue}->setPath(\"" . addslashes($xPath) . "\");\n";
		}
		if (!is_null($xQuery)) {
			$text .= "{$xPagerValue}->setQuery(\"" . addslashes($xQuery) . "\");\n";
		}
		$text .= "echo {$xPagerValue}->__toString();\n";
		$text .= "?>\n";
		
		$this->addFirstChildScript($text);
			
		return true;
	}
}

?>